package dentex.youtube.downloader.sendEmail;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.security.Security;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.StrictMode;
import android.util.Log;

public class GMailSender extends javax.mail.Authenticator {
	private String mailhost = "smtp.gmail.com";
	private String user ;
	private String password ;
	private Session session;

	static {
		Security.addProvider(new dentex.youtube.downloader.sendEmail.JSSEProvider());
	}

	public GMailSender(String user, String password) {
		this.user = user;
		this.password = password;

		Properties props = new Properties();
		props.setProperty("mail.transport.protocol", "smtp");
		props.setProperty("mail.host", mailhost);
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.port", "465");
		props.put("mail.smtp.socketFactory.port", "465");
		props.put("mail.smtp.socketFactory.class",
		"javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.socketFactory.fallback", "false");
		props.setProperty("mail.smtp.quitwait", "false");

		session = Session.getDefaultInstance(props, this);
	}

	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(user, password);
	}

	public boolean sendMail (final String recipients, final String FileName) 
    {
		
		StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

		StrictMode.setThreadPolicy(policy);
       try
                {               
                    //String SSS = FileName.replace("+", "");                   
                    //String Fname = new File (SSS).getName();

                    String Fname = new File (FileName).getName();
                    String RusFname = new String (Fname.getBytes());
                    String sender = "application.defendonite@gmail.com";
                    MimeMessage message = new MimeMessage(session);   
                    message.setSender(new InternetAddress(sender));
                    message.setSubject("TeeWoW Application"); 
                    message.setHeader("Disposition-Notification-To", sender); 
                    message.setHeader("Return-Receipt-To", sender); 
                    MimeBodyPart attachmentPart = new MimeBodyPart();                       
                    FileDataSource fileDataSource = new FileDataSource(FileName) 
                    {
                        @Override
                        public String getContentType() 
                        {
                            return "application/octet-stream";
                         }
                    };
                    attachmentPart.setDataHandler(new DataHandler(fileDataSource));                             
                    attachmentPart.setFileName(MimeUtility.encodeText(RusFname));               
                    Multipart multipart = new MimeMultipart();
                    multipart.addBodyPart(attachmentPart);            
                    message.setContent(multipart);           
                    if (recipients.indexOf(',') > 0) 
                        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));   
                    else  
                        message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));   
                    Transport.send(message);
            		return true;
             
                }
                catch (MessagingException ex)   
                {  
                    ex.printStackTrace(); 
            		return false;

                } catch (UnsupportedEncodingException e)
                {
                    e.printStackTrace();
            		return false;

                }
            
        
      // File file = new File(FileName);
       //file.delete();
 
        
    }

	public class ByteArrayDataSource implements DataSource {
		private byte[] data;
		private String type;

		public ByteArrayDataSource(byte[] data, String type) {
			super();
			this.data = data;
			this.type = type;
		}

		public ByteArrayDataSource(byte[] data) {
			super();
			this.data = data;
		}

		public void setType(String type) {
			this.type = type;
		}

		public String getContentType() {
			if (type == null)
				return "application/octet-stream";
			else
				return type;
		}

		public InputStream getInputStream() throws IOException {
			return new ByteArrayInputStream(data);
		}

		public String getName() {
			return "ByteArrayDataSource";
		}

		public OutputStream getOutputStream() throws IOException {
			throw new IOException("Not Supported");
		}
	}

	
	
}
